﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using STT.Business;
using STT.Entities;
using System.Data;
using System.Data.OleDb;
using Microsoft.Reporting.WebForms;

namespace STT.Admin.UserControls
{
    public partial class ucDonVi : System.Web.UI.UserControl
    {
        public bool chonSuaClick;
        int MaCap;
        bool KiemTraCap, Check;
        bool KiemTraDV;
        bool KiemTraRong;
        bool KiemTraTonTai;
        List<string> error;
        string count;
        public static DataTable tbStatic;
        public static string tk;
        protected void Page_Load(object sender, EventArgs e)
        {
           
                LoadDonVi();

            
            
            chonSuaClick = false;
            Methods.Cap(ref ddlCap);
        }
        void LoadDonVi()
        {
            gvDonVi.AutoGenerateColumns = false;
            gvDonVi.DataSource = BTbDonVi.SelectAll();
            gvDonVi.DataBind();
        }
        bool KiemTraDuLieu_Sua()
        {
            return BTbDonVi.KiemTraDuLieu_Sua(new ETbDonVi
            {
                TenDonVi = txtTenDonVi.Text,
                MaDonVi = int.Parse(hfMaDonVi.Value)
            });
        }
        bool KiemTraDuLieu()
        {
            return BTbDonVi.KiemTraDuLieu(new ETbDonVi
            {
                TenDonVi = txtTenDonVi.Text

            });
        }

        void ThongBao(string Loi)
        {
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "Thông báo!", "<script>alert('" + Loi + "')</script>", false);
        }
        protected void gvDonVi_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "ChonSua")
            {
                gvDonVi.Columns.Clear();
               
                // Lay id
                int index = Convert.ToInt32(e.CommandArgument);
                hfMaDonVi.Value = gvDonVi.DataKeys[index].Value.ToString();
                // Thay đổi tiêu đề
                txtTieuDe.InnerText = "Sửa Đơn vị";

                txtTenDonVi.Text = HttpUtility.HtmlDecode(gvDonVi.Rows[index].Cells[1].Text);
                txtNgayThanhLap.Text = DateTime.Parse(gvDonVi.Rows[index].Cells[2].Text).ToString("yyyy-MM-dd");
                ddlCap.SelectedIndex = ddlCap.Items.IndexOf(ddlCap.Items.FindByText(HttpUtility.HtmlDecode(gvDonVi.Rows[index].Cells[6].Text)));
                txtDiaChi.Text = HttpUtility.HtmlDecode(gvDonVi.Rows[index].Cells[3].Text);
                txtSDT.Text = HttpUtility.HtmlDecode(gvDonVi.Rows[index].Cells[4].Text.TrimEnd());
                ddLoaiDV.SelectedValue = HttpUtility.HtmlDecode(gvDonVi.Rows[index].Cells[5].Text);


                chonSuaClick = true;
            }
          
        }

        protected void btSearch_Click(object sender, ImageClickEventArgs e)
        {


            gvDonVi.DataSource = null;
        
            tbStatic = BTbDonVi.SearchDonVi(new ETbDonVi
            {
                TenDonVi = txtTimKiem.Text
            });
            gvDonVi.DataSource = tbStatic;
            gvDonVi.DataBind();
           
        }

        protected void lbXuatDuLieu_Click(object sender, EventArgs e)
        {

        }

        protected void lbXoaTat_Click(object sender, EventArgs e)
        {
            try
            {
                for (int i = 0; i < gvDonVi.Rows.Count; i++)
                {
                    CheckBox cbChon = (CheckBox)gvDonVi.Rows[i].Cells[0].FindControl("cbChon");
                    if (cbChon != null && cbChon.Checked)
                    {
                        BTbDonVi.Delete(int.Parse(gvDonVi.DataKeys[i].Value.ToString()));
                    }
                }

                LoadDonVi();
                Session["action"] = 3;
            }
            catch
            {
                ThongBao("Dữ liệu liên quan của một số đơn vị vẫn tồn tại, vui lòng kiểm tra lại dữ liệu!");
            }
        }

        protected void btThemMoi_Click(object sender, EventArgs e)
        {
            if (KiemTraDuLieu())
            {
                BTbDonVi.Insert(new ETbDonVi
                {
                    TenDonVi = txtTenDonVi.Text,
                    NgayThanhLap = DateTime.Parse(txtNgayThanhLap.Text),
                    DiaChi = txtDiaChi.Text,
                    Sdt = txtSDT.Text.Trim(),
                    Loai = Int32.Parse(ddLoaiDV.SelectedValue),
                    MaCap = Int32.Parse(ddlCap.SelectedValue)
                });
                LoadDonVi();
                Session["action"] = 1;
            }
            else
            {
                ThongBao("Đơn vị này đã tồn tại!");
            }
        }
        bool CheckDateTime(string String)
        {
            DateTime Date;
            if (DateTime.TryParse(String, out Date))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        bool CheckInt(string String)
        {
            int Int;
            if (Int32.TryParse(String, out Int))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        protected void btThemExcel_Click(object sender, EventArgs e)
        {
            if (FileUpload.HasFile)
            {
                error = new List<string>();
                string filename = FileUpload.FileName;
                string[] str = FileUpload.FileName.Split('.');
                string ten = str[0];
                string duoi = str[1];
                if (duoi == "xls" || duoi == "xlsx")
                {
                    string path = string.Concat(Server.MapPath("~/uploads/files/" + DateTime.Now.ToString("yyyymmddhhmmssfff") + ten + "." + duoi));
                    FileUpload.PostedFile.SaveAs(path);
                    OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                    OleDbCommand command = new OleDbCommand("select * from [sheet1$]", oledbcon);
                    OleDbDataAdapter objadapter1 = new OleDbDataAdapter(command);
                    oledbcon.Open();
                    DataTable dt = new DataTable();
                    objadapter1.Fill(dt);
                    if (dt.Rows.Count > 0)
                    {
                        DataTable dt1 = BTbCap.SelectAll();
                        DataTable dt2 = BTbDonVi.SelectAll();
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            KiemTraRong = true;
                            KiemTraTonTai = true;
                            for (int o = 0; o < dt.Columns.Count; o++)
                            {
                                //test = true;
                                KiemTraRong = true;
                                if (dt.Rows[i][o].ToString().Trim().Equals(""))
                                {
                                    KiemTraRong = false;
                                    //est = false;
                                    error.Add("Lỗi bỏ trống trường của đơn vị thứ " + dt.Rows[i][0].ToString() + "!");
                                    break;
                                }
                            }
                            for (int j = 0; j < dt2.Rows.Count; j++)
                            {
                                KiemTraTonTai = true;
                                Check = true;
                                if (dt.Rows[i]["Tên đơn vị"].ToString().ToLower().Trim() == dt2.Rows[j][1].ToString().ToLower().Trim())
                                {
                                    KiemTraTonTai = false;
                                    error.Add("Đơn vị: " + dt.Rows[i]["Tên đơn vị"].ToString() + " đã tồn tại!");
                                    break;
                                }
                            }
                            #region// Kiểm tra lỗi nhập dữ liệu datetime, int, float
                            if (!CheckDateTime(dt.Rows[i]["Ngày thành lập"].ToString().Trim()))
                            {
                                error.Add("Kiểu dữ liệu ngày thành lập của đơn vị " + dt.Rows[i]["Tên đơn vị"].ToString() + " không đúng! Nhập dạng tháng/ngày/năm");
                                Check = false;
                            }
                           
                            //if (!CheckInt(dt.Rows[i]["SDT"].ToString().Trim()))
                            //{
                            //    error.Add("Kiểu dữ liệu Số điện thoại " + dt.Rows[i]["Tên đơn vị"].ToString() + " không đúng! Nhập dạng số!");
                            //    Check = false;
                            //}
                            #endregion
                            if (KiemTraRong && KiemTraTonTai && Check)
                            {
                                for (int k = 0; k < dt1.Rows.Count; k++)
                                {
                                    KiemTraRong = true;
                                    if (dt.Rows[i]["Cấp"].ToString().ToLower().Trim() == dt1.Rows[k][1].ToString().ToLower().Trim())
                                    {
                                        KiemTraCap = true;

                                        MaCap = Int32.Parse(dt1.Rows[k][0].ToString());
                                        break;
                                    }
                                    else
                                    {
                                        KiemTraCap = false;
                                    }
                                }
                                if (!KiemTraCap)
                                {
                                    error.Add("Cấp " + dt.Rows[i]["Tên đơn vị"].ToString() + " không tồn tại!");
                                }
                                if (KiemTraCap)
                                {
                                    //try
                                    //{
                                        BTbDonVi.Insert(new ETbDonVi
                                        {
                                            TenDonVi = dt.Rows[i]["Tên đơn vị"].ToString(),
                                            NgayThanhLap = DateTime.Parse(DateTime.Parse(dt.Rows[i]["Ngày thành lập"].ToString()).ToString("MM-dd-yyyy")),
                                            DiaChi = dt.Rows[i]["Địa chỉ"].ToString(),
                                            Sdt = dt.Rows[i]["SDT"].ToString(),
                                            Loai = Int32.Parse(dt.Rows[i]["Loại"].ToString()),
                                            MaCap = MaCap
                                        });
                                    //}
                                    //catch (Exception ex)
                                    //{
                                    //    Response.Write("");
                                    //}
                                }
                            }
                        }
                        for (int i = 0; i < error.Count; i++)
                        {
                            count += " + " + error[i].ToString() + "<br/>";
                        }
                        //thongbao(loi);
                        if (error.Count > 0)
                        {
                            plError.Visible = true;
                            lbError.Text = "Bạn kiểm tra lại thông tin đơn vị có mã:" + "<br/>" + count;
                        }
                    }
                    oledbcon.Close();
                }
                else
                {
                    ThongBao("Tệp tin không đúng định dạng Excel!");
                }
            }
            else
            {
                ThongBao("Bạn chưa tải tệp tin!");
            }
            LoadDonVi();
            Session["action"] = 1;
        }
        protected void btSua_Click(object sender, EventArgs e)
        {
            if (!KiemTraDuLieu_Sua())
            {
                BTbDonVi.Update(new ETbDonVi
                {
                    MaDonVi = Int32.Parse(hfMaDonVi.Value),
                    TenDonVi = txtTenDonVi.Text,
                    NgayThanhLap = DateTime.Parse(txtNgayThanhLap.Text),
                    DiaChi = txtDiaChi.Text,
                    Sdt = txtSDT.Text.Trim(),
                    Loai = Int32.Parse(ddLoaiDV.SelectedValue),
                    MaCap = Int32.Parse(ddlCap.SelectedValue)
                });
                LoadDonVi();
                Session["action"] = 2;
            }
            else
            {
                ThongBao("Vui lòng kiểm tra lại dữ liệu , dữ liệu đã tồn tại !");
            }

        }

        protected void gvDonVi_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                int MaDonVi = int.Parse(gvDonVi.DataKeys[e.RowIndex].Value.ToString());

                BTbDonVi.Delete(MaDonVi);
                LoadDonVi();

                Session["action"] = 3;

            }
            catch
            {
                ThongBao("Dữ liệu liên quan đến đơn vị này vẫn tồn tại, vui lòng kiểm tra lại dữ liệu!");
            }
        }

        protected void gvDonVi_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvDonVi.PageIndex = e.NewPageIndex;
            gvDonVi.DataBind();
        }


    }
}